package teste.objetos;

import junit.framework.Assert;
import objetos.Item;
import objetos.Mensagem;
import objetos.Usuario;

import org.junit.Before;
import org.junit.Test;

import util.Data;

public class TestMensagem {

	private Usuario remetenteUm;
	private Usuario remetenteDois;
	private Usuario destinatarioUm;
	private Usuario destinatarioDois;
	private Mensagem mensagemUm;
	private Mensagem mensagemDois;
	private Mensagem mensagemTres;
	private Item itemUm;
	private Data dataAtual;
	
	@Before
	public void setUp() throws Exception{
		this.remetenteUm = new Usuario("remetente1", "Remetente Um", "Endereco Remetente Um");
		this.remetenteDois = new Usuario("remetente2", "Remetente Dois", "Endereco Remetente Dois");
		this.destinatarioUm = new Usuario("destinatario1", "Destinatario Um", "Endereco Destinatario Um");
		this.destinatarioDois = new Usuario("destinatario2", "Destinatario Dois", "Endereco Destinatario Dois");
		this.itemUm = new Item(this.remetenteUm, "Item Um", "Descricao do Item Um", "Jogo", 1);
		this.mensagemUm = new Mensagem("Assunto Mensagem Um", "Corpo da Mensagem Um", this.destinatarioUm, this.remetenteUm);
		this.mensagemDois = new Mensagem("Assunto Mensagem Dois", "Corpo da Mensagem Dois", this.destinatarioDois, this.remetenteDois);
		this.mensagemTres = new Mensagem(this.destinatarioUm, this.remetenteUm, this.itemUm);
		this.dataAtual = new Data();
	}
	
	@Test
	public void verificaConstrutor() {
		try{
			new Mensagem("Assunto", "", this.destinatarioUm, this.remetenteUm);
			Assert.fail("Vai entrar em excecao!");
		}
		catch(Exception e){
			Assert.assertEquals("Corpo da Mensagem vazio", "Mensagem inválida", e.getMessage());
		}	
	}
	
	@Test
	public void getAssunto(){
		Assert.assertEquals("Assunto Mensagem Um", this.mensagemUm.getAssunto());
		Assert.assertEquals("Assunto Mensagem Dois", this.mensagemDois.getAssunto());
	}
	
	@Test
	public void getCorpoDaMensagem(){
		Assert.assertEquals("Corpo da Mensagem Um", this.mensagemUm.getCorpoDaMensagem());
		Assert.assertEquals("Corpo da Mensagem Dois", this.mensagemDois.getCorpoDaMensagem());
	}
	
	@Test
	public void getDestinatario(){
		Assert.assertEquals(this.destinatarioUm, this.mensagemUm.getDestinatario());
		Assert.assertEquals(this.destinatarioDois, this.mensagemDois.getDestinatario());
	}
	
	@Test
	public void getRemetente(){
		Assert.assertEquals(this.remetenteUm, this.mensagemUm.getRemetente());
		Assert.assertEquals(this.remetenteDois, this.mensagemDois.getRemetente());
	}
	
	@Test
	public void getDataDeEnvio(){
		Assert.assertEquals(this.dataAtual.dataFormatada(), this.mensagemUm.getDataDeEnvio().dataFormatada());
		Assert.assertEquals(this.dataAtual.dataFormatada(), this.mensagemDois.getDataDeEnvio().dataFormatada());
	}
	
	@Test
	public void setIsPadrao(){
		Assert.assertEquals(false, this.mensagemUm.isPadrao());
		Assert.assertEquals(false, this.mensagemDois.isPadrao());
		Assert.assertEquals(true, this.mensagemTres.isPadrao());
		this.mensagemUm.setEhPadrao(true);
		this.mensagemDois.setEhPadrao(true);
		this.mensagemTres.setEhPadrao(false);
		Assert.assertEquals(true, this.mensagemUm.isPadrao());
		Assert.assertEquals(true, this.mensagemDois.isPadrao());
		Assert.assertEquals(false, this.mensagemTres.isPadrao());
	}
	
	@Test
	public void setIsLida(){
		Assert.assertEquals(false, this.mensagemUm.isLida());
		Assert.assertEquals(false, this.mensagemDois.isLida());
		Assert.assertEquals(false, this.mensagemTres.isLida());
		this.mensagemUm.setLida(true);
		this.mensagemDois.setLida(true);
		this.mensagemTres.setLida(true);
		Assert.assertEquals(true, this.mensagemUm.isLida());
		Assert.assertEquals(true, this.mensagemDois.isLida());
		Assert.assertEquals(true, this.mensagemTres.isLida());
	}

}
